1. Field of the Invention
The present invention relates to a method of enlarging a visual image, and, more particularly, to a method of enlarging a two dimensional visual image including a plurality of pixels.
2. Description of the Related Art
In many types of image processing, there is a need for a visual image, formed by a two dimensional matrix of pixels, to be scaled up or enlarged. For instance, when an image is sent to a printer, the resolution of the image data may be lower than the resolution of the printer, which requires that the image be enlarged for printing. It is quite common for images viewed on a computer monitor to have a low spatial resolution. Dimensions of 640 pixels by 480 pixels are commonly acquired by frame grabbers using a video camera or tape as the input source. With the growth of the Internet, use of low resolution images has become even more common. On a cathode-ray tube (CRT) monitor, such low resolution images have an acceptable appearance by virtue of the CRT being a low resolution device and being well suited to a low resolution image. This is not the case, however, for printers, which commonly have a resolution of 600 dots per inch (dpi) or higher. If a user prints a 640 pixel by 480 pixel image on a letter size page, each pixel of the image corresponds to a large matrix or block of dots on the printed page.
For example, assuming a half inch margin at each edge of a page, an 8.5 inch by 11 inch letter size page contains a 4500 by 6000 matrix of dots. That is, the letter size page contains a matrix measuring
7.5 inch.times.600 dpi=4500 dots by PA1 10 inch.times.600 dpi=6000 dots.
Thus, the 640 pixel by 480 pixel image must be enlarged to a 6000 by 4500 matrix of dots on the printed page.
In order to enlarge the original image, the image information within each pixel of the image is assigned to a corresponding pixel in the enlarged image of higher resolution such that the pixels of the original image are spread out across the pixels of the enlarged image. In other words, the pixels of the original image are separated by intervening blank pixels in the enlarged image. One method of "filling in" or placing image data with the intervening blank pixels is to simply replicate each of the original pixels in a respective group of intervening pixels which surrounds the original pixel. However, this results in a visually unappealing "blockiness" in the enlarged image, with sharp contrasts between adjacent blocks of uniform color. If the color values of two adjacent blocks are more than only slightly different, an abrupt color transition will be quite noticeable at the edge where the two blocks meet.
Another method of filling in the intervening blank pixels is to interpolate the pixel data of the original image. Rather than simply replicate the same value throughout an entire block of pixels in the enlarged image, interpolation produces color values that flow smoothly and continuously from one input color value to the next. Different interpolation methods exist, but the most straightforward is bilinear interpolation. Bilinear interpolation uses the smallest square, as defined by four pixels of the original image, which contains the intervening pixel whose color value is to be computed. FIG. 1 shows an intervening point P having coordinates (x,y) and being disposed within a unit square defined by four original image pixels P0, P1, P2 and P3. Pixel P0 is defined as the origin of the square, and thus is assigned coordinates (0,0). The diagonally opposite corner pixel P3 is assigned coordinates (1,1). Using bilinear interpolation, a color value p at pixel P is determined by the following equation: EQU p=x*y*p3+(1-x)*y*p2+x*(1-y)*p1+(1-x)*(1-y)*p0,
wherein p0, p1, p2 and p3 are defined as the color values at pixels P0, P1, P2 and P3, respectively. Applying bilinear interpolation to image scaling requires solving the above equation for every intervening pixel in the enlarged image. Thus, while interpolation improves the visual quality of the resulting enlarged image by eliminating the blockiness of the first method discussed above, the computational time required to perform interpolation is quite high.
On a printer, the above color values are not displayed directly. This is because a printer is incapable of displaying as broad a range of color values as the pixels contain. Rather, a printer may only be capable of bi-level output. In such bi-level output, at a certain point on the print medium, a dot of a particular color is either printed, or it is not. A process referred to as "halftoning" is used to convey the color values of the visual image to the print medium with a bi-level output. Halftoning can be accomplished using threshold arrays, error diffuision or other techniques, such methods being well known to those skilled in the art. In halftoning, a dot is placed at a given point on the print medium only if the color value of the corresponding pixel exceeds a threshold value. Thus, the higher the color values in a certain area of the image, the more dots that are printed on the print medium. The human eye tends to average the printed dots and white spaces together as a shade of a color. Moreover, the various ratios of dots to blank spaces in different areas of the printed display are perceived as being different shades of color, corresponding to the color values of the image.
Bi-level printing based upon a comparison of the color value of each pixel to the same constant threshold value would result in undesirable artifacts in the printed image, however. Similar to the blockiness described above, these artifacts may include abrupt color transitions in areas where color values to one side of a line are below the threshold value, and color values to the other side of the line are above the threshold value. To eliminate such artifacts, the single threshold value is replaced by a matrix of various threshold values, as shown in FIG. 4. Since color values typically have 256 levels, the threshold matrix can be a sixteen row by sixteen column arrangement of cells, with each cell containing a threshold value ranging between 0 and 255. For ease of illustration, however, the threshold matrix of FIG. 4 is shown as a four cell by four cell matrix having threshold values between zero and fifteen. In a process called "masking", the threshold matrix can be thought of as being superimposed over the image to be printed, with each cell of the threshold matrix corresponding to a pixel in the image. In order to determine whether to print a dot, the color value of each pixel of the image is compared to the threshold value within the corresponding cell of the threshold matrix. In essence, the color value of the pixel is a probability indicating the likelihood that a dot will be printed at the corresponding point on the print medium. The threshold matrix is then applied to an adjacent block of pixels, and the process continues until all of the pixels of the image have been masked. Separate threshold matrices can be used for each color component of the printed image, such as cyan, magenta and yellow.